efi: Lock down the kernel if booted in secure boot mode
authorDavid Howells <dhowells@redhat.com>
Wed, 8 Nov 2017 15:11:37 +0000 (15:11 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 15 May 2019 22:07:16 +0000 (23:07 +0100)
UEFI Secure Boot provides a mechanism for ensuring that the firmware will
only load signed bootloaders and kernels.  Certain use cases may also
require that all kernel modules also be signed.  Add a configuration option
that to lock down the kernel - which includes requiring validly signed
modules - if the kernel is secure-booted.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
cc: linux-efi@vger.kernel.org

Gbp-Pq: Topic features/all/lockdown
Gbp-Pq: Name 0029-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch

arch/x86/kernel/setup.c
security/Kconfig
security/lock_down.c

index ed052736b88c48303e1bf8b4e86d9f5548acf64a..d402c61d1a3066925a344fa032cd241849530da4 100644 (file)
@@ -65,6 +65,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/ctype.h>
 #include <linux/uaccess.h>
+#include <linux/security.h>
 
 #include <linux/percpu.h>
 #include <linux/crash_dump.h>
@@ -1005,6 +1006,9 @@ void __init setup_arch(char **cmdline_p)
        if (efi_enabled(EFI_BOOT))
                efi_init();
 
+       efi_set_secure_boot(boot_params.secure_boot);
+       init_lockdown();
+
        dmi_scan_machine();
        dmi_memdev_walk();
        dmi_set_dump_stack_arch_desc();
@@ -1159,8 +1163,6 @@ void __init setup_arch(char **cmdline_p)
        /* Allocate bigger log buffer */
        setup_log_buf(1);
 
-       efi_set_secure_boot(boot_params.secure_boot);
-
        reserve_initrd();
 
        acpi_table_upgrade();
index 71a66c09b1f5522e1ea29a82da7a1e5d646aa8bc..0e4351249b8a2bfbfa7c42c63773ac91dbe85e08 100644 (file)
@@ -256,6 +256,20 @@ config ALLOW_LOCKDOWN_LIFT_BY_SYSRQ
          Allow the lockdown on a kernel to be lifted, by pressing a SysRq key
          combination on a wired keyboard.
 
+config LOCK_DOWN_IN_EFI_SECURE_BOOT
+       bool "Lock down the kernel in EFI Secure Boot mode"
+       default n
+       select LOCK_DOWN_KERNEL
+       depends on EFI
+       help
+         UEFI Secure Boot provides a mechanism for ensuring that the firmware
+         will only load signed bootloaders and kernels.  Secure boot mode may
+         be determined from EFI variables provided by the system firmware if
+         not indicated by the boot parameters.
+
+         Enabling this option turns on results in kernel lockdown being
+         triggered if EFI Secure Boot is set.
+
 
 source security/selinux/Kconfig
 source security/smack/Kconfig
index 2c6b00f0c229e411e093f93dad7b98a1331ef398..527f7e51dc8de092d33be4085cbfbc6193129a29 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/security.h>
 #include <linux/export.h>
 #include <linux/sysrq.h>
+#include <linux/efi.h>
 #include <asm/setup.h>
 
 #ifdef CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ